def get_name(self):
    return self.name


class BaseClass:
    def __init__(self, name):
        self.name = name
        print('====== I am Base Class =======')


User = type('User', (BaseClass,), {"name": "User", "get_name": get_name})


class MetaClass(type):
    def __new__(cls, *args, **kwargs):
        print('====== I am Meta Class =======')
        return super().__new__(cls, *args, **kwargs)


class Person(metaclass=MetaClass):
    def __init__(self, name):
        print('====== I am Person Class =======')
        self.name = name


    def __str__(self):
        return r'Person({},id:{})'.format(self.name, id(self))


def create_user():
    user = User(name='vincent')
    print(user)


def create_person():
    person = Person('vincent')
    print(person)


if __name__ == '__main__':
    # create_user()
    create_person()
